#pragma once
#include "uart/ProtocolSender.h"

#include "utils/PWMHelper.h"
#include "utils/AdcHelper.h"
#include "utils/BrightnessHelper.h"
/*
*此文件由GUI工具生成
*文件功能：用于处理用户的逻辑相应代码
*功能说明：
*========================onButtonClick_XXXX
当页面中的按键按下后系统会调用对应的函数，XXX代表GUI工具里面的[ID值]名称，
如Button1,当返回值为false的时候系统将不再处理这个按键，返回true的时候系统将会继续处理此按键。比如SYS_BACK.
*========================onSlideWindowItemClick_XXXX(int index) 
当页面中存在滑动窗口并且用户点击了滑动窗口的图标后系统会调用此函数,XXX代表GUI工具里面的[ID值]名称，
如slideWindow1;index 代表按下图标的偏移值
*========================onSeekBarChange_XXXX(int progress) 
当页面中存在滑动条并且用户改变了进度后系统会调用此函数,XXX代表GUI工具里面的[ID值]名称，
如SeekBar1;progress 代表当前的进度值
*========================ogetListItemCount_XXXX() 
当页面中存在滑动列表的时候，更新的时候系统会调用此接口获取列表的总数目,XXX代表GUI工具里面的[ID值]名称，
如List1;返回值为当前列表的总条数
*========================oobtainListItemData_XXXX(ZKListView::ZKListItem *pListItem, int index)
 当页面中存在滑动列表的时候，更新的时候系统会调用此接口获取列表当前条目下的内容信息,XXX代表GUI工具里面的[ID值]名称，
如List1;pListItem 是贴图中的单条目对象，index是列表总目的偏移量。具体见函数说明
*========================常用接口===============
*LOGD(...)  打印调试信息的接口
*mTextXXXPtr->setText("****") 在控件TextXXX上显示文字****
*mButton1Ptr->setSelected(true); 将控件mButton1设置为选中模式，图片会切换成选中图片，按钮文字会切换为选中后的颜色
*mSeekBarPtr->setProgress(12) 在控件mSeekBar上将进度调整到12
*mListView1Ptr->refreshListView() 让mListView1 重新刷新，当列表数据变化后调用
*mDashbroadView1Ptr->setTargetAngle(120) 在控件mDashbroadView1上指针显示角度调整到120度
*
* 在Eclipse编辑器中  使用 “alt + /”  快捷键可以打开智能提示
*/
int val = 200;
bool Main_count_enable = true;
BYTE Sleep_count = 0;//睡眠时间
BYTE AutoScreenNUM = 1;//自动模式界面
BYTE ManualLevel = 1;//手动模式档位
///////////////////power mode speed brightness
BYTE mainCMD[] = { 0x00,0x00, 0x00, 0x00 };//指令数据
UINT16 Afilter = 800;//滤网剩余寿命
BYTE A_PM25 = 0;
BYTE A_PM10 = 0;
BYTE A_NO2 = 0;
static void updateAnimation(){
    static int DH1Index = 0;
	char path[50] = {0};
	snprintf(path, sizeof(path), "DH%d/loading_%d.jpg",ManualLevel, DH1Index);
	//snprintf(path, sizeof(path), "DH3/loading_%d.png", DH1Index);
	mTextviewD1Ptr->setBackgroundPic(path);
	DH1Index = (DH1Index + 1) % 5;
}


/**
 * 是否注册了定时器
 */
static bool isRegistered = false;
#define TIMER_HANDLE   2
#define TIMER_time   20000
/**
 * 注册定时器
 * 填充数组用于注册定时器
 * 注意：id不能重复
 */
static S_ACTIVITY_TIMEER REGISTER_ACTIVITY_TIMER_TAB[] = {
	{0,  200}, //定时器id=0, 时间间隔6秒
	{1,  1000},
};

static void ShowSleep()
{
	mTextViewDD0Ptr->setVisible(false);
	mButton4Ptr->setVisible(false);
	mButton5Ptr->setVisible(false);
	mWindowPETONEPtr->showWnd();
    mWindowdonghuaPtr->hideWnd();
    mWindowTXPtr->hideWnd();

    BRIGHTNESSHELPER->setBrightness(0);

	mainCMD[0] = 0;
	sendProtocol(0x01, mainCMD, 4);
}

static void ShowWakeup()
{
	mTextViewDD0Ptr->setVisible(true);
	mButton4Ptr->setVisible(true);
	mButton5Ptr->setVisible(true);
	mWindowPETONEPtr->showWnd();
    mWindowdonghuaPtr->hideWnd();
    mWindowTXPtr->hideWnd();

    Main_count_enable = true;
	Sleep_count = 0;
	BRIGHTNESSHELPER->setBrightness((800-val)/6);

	mainCMD[0] = 1;
	sendProtocol(0x01, mainCMD, 4);
}

static void ShowAutoPic(int num)
{
	mTextView1Ptr->setVisible(false);
	mTextView2Ptr->setVisible(false);
	mTextView3Ptr->setVisible(false);
	mTextView3aPtr->setVisible(false);
	mTextView3bPtr->setVisible(false);
	mTextView4Ptr->setVisible(false);
	mTextView25goodPtr->setVisible(false);
	mTextView25bestPtr->setVisible(false);
	mTextView25betterPtr->setVisible(false);
	mTextView10goodPtr->setVisible(false);
	mTextView10bestPtr->setVisible(false);
	mTextView10betterPtr->setVisible(false);
	mTextViewNO2goodPtr->setVisible(false);
	mTextViewNO2bestPtr->setVisible(false);
	mTextViewNO2betterPtr->setVisible(false);

	switch (num)
	{
	case 1:
		mTextView1Ptr->setVisible(true);
		break;

	case 2:
		mTextView2Ptr->setVisible(true);
		break;

	case 3:
		if(Afilter<300)
			mTextView3bPtr->setVisible(true);
		else if(Afilter>=300&&Afilter<800)
			mTextView3aPtr->setVisible(true);
		else
			mTextView3Ptr->setVisible(true);
		break;

	case 4:
		mTextView4Ptr->setVisible(true);
		break;

	case 5:
		if(A_PM25==0)
			mTextView25bestPtr->setVisible(true);
		else if(A_PM25==1)
			mTextView25betterPtr->setVisible(true);
		else if(A_PM25==2)
			mTextView25goodPtr->setVisible(true);
		break;

	case 6:
		if(A_PM10==0)
			mTextView10bestPtr->setVisible(true);
		else if(A_PM10==1)
			mTextView10betterPtr->setVisible(true);
		else if(A_PM10==2)
			mTextView10goodPtr->setVisible(true);
		break;

	case 7:
		if(A_NO2==0)
			mTextViewNO2bestPtr->setVisible(true);
		else if(A_NO2==1)
			mTextViewNO2betterPtr->setVisible(true);
		else if(A_NO2==2)
			mTextViewNO2goodPtr->setVisible(true);
		break;
	default:
		break;
	}
}
/**
 * 当界面构造时触发
 */
static void onUI_init(){
    //Tips :添加 UI初始化的显示代码到这里,如:mText1Ptr->setText("123");
	ShowWakeup();
}

/**
 * 当切换到该界面时触发
 */
static void onUI_intent(const Intent *intentPtr) {
    if (intentPtr != NULL) {
        //TODO
    }
}

/*
 * 当界面显示时触发
 */
static void onUI_show() {

}

/*
 * 当界面隐藏时触发
 */
static void onUI_hide() {

}

/*
 * 当界面完全退出时触发
 */
static void onUI_quit() {

}

/**
 * 串口数据回调接口
 */
static void onProtocolDataUpdate(const SProtocolData &data) {
	//if(data.power)
	//{
	//	ShowWakeup();

		if(!Main_count_enable)
		{
			if(data.mode)
			{
				mWindowPETONEPtr->hideWnd();
				mWindowdonghuaPtr->hideWnd();
				mWindowTXPtr->showWnd();
			}
			else
			{
				mWindowPETONEPtr->hideWnd();
				mWindowdonghuaPtr->showWnd();
				mWindowTXPtr->hideWnd();
			}

			if(data.speed>0&&data.speed<4)
				ManualLevel = data.speed;
		}
	//}
	//else
	//	ShowSleep();

	if(mWindowPETONEPtr->isWndShow())
	{
		if(data.radar||data.touch)
			ShowWakeup();
	}

	if(mWindowTXPtr->isWndShow())
	{
		if(data.radar||data.touch)
		{
			mainCMD[1] = 1;
			if(AutoScreenNUM==1)
				mainCMD[2] = 2;
			else if(AutoScreenNUM==2)
				mainCMD[2] = 3;

			sendProtocol(0x01, mainCMD, 4);
		}

		if(AutoScreenNUM==3)//亮度
		{
			Afilter = data.filter;
			ShowAutoPic(AutoScreenNUM);
		}

		if(AutoScreenNUM>4&&AutoScreenNUM<8)//亮度
		{
			A_PM25 = data.PM25;
			A_PM10 = data.PM10;
			A_NO2 = data.NO2;
			ShowAutoPic(AutoScreenNUM);
		}
	}
}

static void testPwm() {
    /**
     * 参数1： 端口号
     * 参数2： 频率
     * 参数3： 占空比
     * 参数4： 极性
     *
     * 默认是使能状态
     */
    PWMHelper pwm(3, 2500, 50, 0);

    // 以下延时用于测试设置后的效果
    usleep(50000);

    // 设置频率
    pwm.setFreq(2700);
    // 设置占空比
    pwm.setDuty(100);
    usleep(50000);

    // 关闭
    pwm.setEnable(false);
    usleep(50000);

    // 打开
    pwm.setEnable(true);
    usleep(50000);
  }


static void testAdc() {
  /**
   * 设置adc使能状态
   *
   * @param true 使能
   *        false 禁止
   *         默认是使能状态
   */
  AdcHelper::setEnable(true);

  //for (int i = 0; i < 10; i++) {
    // 读取adc值
    val = AdcHelper::getVal();
    //LOGD("adc val = %d\n", val);

    BRIGHTNESSHELPER->setBrightness((800-val)/6);
  //}
}

/**
 * 定时器触发函数
 * 不建议在此函数中写耗时操作，否则将影响UI刷新
 * 参数： id
 *         当前所触发定时器的id，与注册时的id相同
 * 返回值: true
 *             继续运行当前定时器
 *         false
 *             停止运行当前定时器
 */
static bool onUI_Timer(int id){
	switch (id) {
		case 0:
			if(mWindowdonghuaPtr->isWndShow())
				updateAnimation();
			break;

		case 1:
			//sendProtocol(0x01, mainCMD, 4);
			if(Sleep_count!=16)
				testAdc();

			if(Main_count_enable&&Sleep_count<15)
			{
				Sleep_count++;
				LOGD(" Sleep_count - %d \n",Sleep_count);
			}

			if(Sleep_count==15)
			{
				Sleep_count = 16;
				ShowSleep();
			}

			break;

		case TIMER_HANDLE://延时
	    	AutoScreenNUM = 4;
	    	ShowAutoPic(AutoScreenNUM);
	    	isRegistered = false;
		    return false;
			break;

		default:
			break;
	}
    return true;
}



/**
 * 有新的触摸事件时触发
 * 参数：ev
 *         新的触摸事件
 * 返回值：true
 *            表示该触摸事件在此被拦截，系统不再将此触摸事件传递到控件上
 *         false
 *            触摸事件将继续传递到控件上
 */
static bool onmainActivityTouchEvent(const MotionEvent &ev) {
    switch (ev.mActionStatus) {
		case MotionEvent::E_ACTION_DOWN://触摸按下
			testPwm();

			if(Main_count_enable)
				ShowWakeup();

			//LOGD("时刻 = %ld 坐标  x = %d, y = %d", ev.mEventTime, ev.mX, ev.mY);
			break;
		case MotionEvent::E_ACTION_MOVE://触摸滑动
			break;
		case MotionEvent::E_ACTION_UP:  //触摸抬起
			break;
		default:
			break;
	}
	return false;
}
static bool onButtonClick_Button1(ZKButton *pButton) {
    LOGD(" ButtonClick Button1 !!!\n");
    mWindowPETONEPtr->hideWnd();
    mWindowdonghuaPtr->hideWnd();
    mWindowTXPtr->showWnd();

    mainCMD[1] = 1;
	sendProtocol(0x01, mainCMD, 4);
    return false;
}

static bool onButtonClick_Button2(ZKButton *pButton) {
    LOGD(" ButtonClick Button2 !!!\n");
    ManualLevel++;
    if(ManualLevel>3)
    	ManualLevel = 3;

    mainCMD[1] = 0;
	mainCMD[2] = ManualLevel;
	sendProtocol(0x01, mainCMD, 4);
    return false;
}

static bool onButtonClick_Button3(ZKButton *pButton) {
    LOGD(" ButtonClick Button3 !!!\n");
    ManualLevel--;
    if(ManualLevel<1)
    	ManualLevel = 1;

    mainCMD[1] = 0;
	mainCMD[2] = ManualLevel;
	sendProtocol(0x01, mainCMD, 4);
    return false;
}

static bool onButtonClick_Button4(ZKButton *pButton) {
    LOGD(" ButtonClick Button4 !!!\n");
    Main_count_enable = false;

    mWindowPETONEPtr->hideWnd();
    mWindowdonghuaPtr->hideWnd();
    mWindowTXPtr->showWnd();
    //pButton->setSelected(1);

    mainCMD[1] = 1;
	sendProtocol(0x01, mainCMD, 4);
    return false;
}

static bool onButtonClick_Button5(ZKButton *pButton) {
    LOGD(" ButtonClick Button5 !!!\n");
    Main_count_enable = false;

    mWindowPETONEPtr->hideWnd();
    mWindowdonghuaPtr->showWnd();
    mWindowTXPtr->hideWnd();

    mainCMD[1] = 0;
	sendProtocol(0x01, mainCMD, 4);
    return false;
}

static bool onButtonClick_Button6(ZKButton *pButton) {
    LOGD(" ButtonClick Button6 !!!\n");
    return false;
}

static bool onButtonClick_Button7(ZKButton *pButton) {
    AutoScreenNUM++;
    LOGD(" ButtonClick Button7 -- %d !!!\n",AutoScreenNUM);
    if(AutoScreenNUM > 7)
    	AutoScreenNUM = 7;
    ShowAutoPic(AutoScreenNUM);

    if(AutoScreenNUM==5)
    {
		//如果没有注册才进行注册定时器
		if (!isRegistered) {
			mActivityPtr->registerUserTimer(TIMER_HANDLE, TIMER_time);
			isRegistered = true;
		}
    }
    else if(AutoScreenNUM>5&&AutoScreenNUM<9)
    {
    	if (isRegistered)
    		mActivityPtr->resetUserTimer(TIMER_HANDLE, TIMER_time);//重置定时器
    }

    return false;
}

static bool onButtonClick_Button8(ZKButton *pButton) {
    AutoScreenNUM--;
    LOGD(" ButtonClick Button8 -- %d !!!\n",AutoScreenNUM);
    if(AutoScreenNUM < 1)
    	AutoScreenNUM = 1;
    ShowAutoPic(AutoScreenNUM);

    if(AutoScreenNUM==4)
    {
        //如果已经注册了定时器，则取消注册
        if (isRegistered) {
            mActivityPtr->unregisterUserTimer(TIMER_HANDLE);
            isRegistered = false;
        }
    }
    else if(AutoScreenNUM>4&&AutoScreenNUM<7)
    {
    	if (isRegistered)
    		mActivityPtr->resetUserTimer(TIMER_HANDLE, TIMER_time);//重置定时器
    }

    return false;
}

static bool onButtonClick_Button9(ZKButton *pButton) {
    LOGD(" ButtonClick Button9 !!!\n");
    return false;
}

static bool onButtonClick_Button10(ZKButton *pButton) {
    LOGD(" ButtonClick Button10 !!!\n");
    mWindowTXPtr->hideWnd();
    mWindowdonghuaPtr->showWnd();

    mainCMD[1] = 0;
	sendProtocol(0x01, mainCMD, 4);
    return false;
}
